#include "timer.h"

/*******************************************************************************
* 函 数 名       : timer0_init
* 函数功能		 : 初始化定时器0, 以模式1的方式
* 输    入       : t, TH0 << 8 | TL0
* 输    出    	 : 无
*******************************************************************************/
void timer0_init_mode_1(u16 t)
{
	// 配置TMOD(工作模式寄存器) : GATE C/T M1 M0 GATE C/T M1 M0, 后四位配置的是定时器0
	TMOD = TMOD & 0xF0 ; // TMOD 的低4位清0，高4位保持不变
	TMOD = TMOD | 0x01;  // 设置 TMOD01 的低四位
	
	// 配置TCON(控制寄存器, 可位寻址寄存器，可以单独赋值) :
	TF0 = 0;  // 计数溢出标志位, 先清0
	TR0 = 1;  // 开启定时器0
	
	// TH0 TL0 设置计数器初始值, 16位置, 100us
	TL0 = t % 256;		//设置定时初值
	TH0 = t / 256;		//设置定时初值
	
	// IE 寄存器，
	EA = 1;  // 中断总开关
	ET0 = 1; // 允许定时器0/计数器0 触发中断
	PT0 = 0; // 默认低优先级
}

/*******************************************************************************
* 函 数 名       : timer0_init
* 函数功能		 : 初始化定时器1, 以模式2的方式
* 输    入       : t, TH1 = TL1
* 输    出    	 : 无
*******************************************************************************/
void timer1_init_mode_2(u8 t)
{
	// 配置TMOD(工作模式寄存器) : GATE C/T M1 M0 GATE C/T M1 M0, 后四位配置的是定时器0
	TMOD = TMOD & 0x0F ; // TMOD 的高4位清0，高4位保持不变
	TMOD = TMOD | 0x20;  // 设置 TMOD01 的低四位, 使用定时器1的模式2
	
	// 配置TCON(控制寄存器, 可位寻址寄存器，可以单独赋值) :
	TF1 = 0;  // 计数溢出标志位, 先清0
	TR1 = 1;  // 开启定时器0
	
	// TH0 TL0 设置计数器初始值, 16位置, 100us
	TL1 = t;		//设置定时初值
	TH1 = t;		//设置定时器重装值
	
	// IE 寄存器，
	EA = 1;  // 中断总开关
	ET1 = 0; // 允许定时器1中断 
	PT1 = 0; // 默认低优先级
}

/*******************************************************************************
* 函 数 名       : timer2_init
* 函数功能		 : 初始化定时器2, 以模式1的方式
* 输    入       : t, TH0 << 8 | TL0
* 输    出    	 : 无
*******************************************************************************/
void timer2_init(u16 t)
{
	T2MOD = 0;    //初始化模式寄存器
    T2CON = 0;    //初始化控制寄存器
    TL2 = t%256;  //设置定时初值
    TH2 = t/256;   //设置定时初值
    ET2=1;
    EA=1;
    PT2=0;
    TR2 = 1;      //定时器2开始计时
}